package com.lhkj.ct.meta.modules.scheduling.service;

import com.lhkj.ct.base.mybatis.extension.service.BatchHandleService;
import com.lhkj.ct.meta.modules.scheduling.model.dto.ScheduleDto;
import com.lhkj.ct.meta.modules.scheduling.model.dto.ScheduleSearch;
import com.lhkj.ct.meta.modules.scheduling.model.entity.TblScheduling;
import com.lhkj.ct.meta.modules.scheduling.model.vo.ScheduleMonthVo;
import com.lhkj.ct.meta.modules.scheduling.model.vo.SchedulingDateVo;
import com.lhkj.ct.meta.modules.scheduling.model.vo.SchedulingDoctorVo;

import java.time.LocalDate;
import java.util.Collection;
import java.util.List;

/**
 * <p>
 * 排班记录 服务类
 * </p>
 *
 * @author jobob
 * @since 2023-10-27
 */
public interface SchedulingService extends BatchHandleService<TblScheduling> {

    /**
     * 排班管理 - 日历列表
     */
    List<ScheduleMonthVo> selectAllByMonth(ScheduleSearch search);

    /**
     * 排班管理 - 查看某天排班详情
     */
    List<TblScheduling> selectAllByDate(ScheduleSearch search);

    /**
     * 新增排班
     */
    boolean save(ScheduleDto scheduleDto);

    /**
     * 按天取消排班
     */
    boolean cancelByDate(LocalDate date);

    /**
     * 批量取消排班
     */
    int cancel(Collection<?> ids);

    /**
     * 停号
     */
    int stop(Collection<?> ids);

    /**
     * 恢复排班
     */
    int restore(Collection<?> ids);

    /**
     * 预约-排班日期列表
     */
    List<SchedulingDateVo> selectScheDates(ScheduleSearch search);

    /**
     * 预约-排班医生列表
     */
    List<SchedulingDoctorVo> selectScheDoctor(ScheduleSearch search);

    /**
     * 预约-排班时间列表
     */
    List<TblScheduling> selectScheTimes(ScheduleSearch search);
}
